import type {
  DialogProps,
  DrawerProps,
  FormItemRule,
  FormProps,
} from 'element-plus'

// dialog组件属性
export type IDialog = Partial<Omit<DialogProps, 'modelValue'>>

// drawer组件属性
export type IDrawer = Partial<Omit<DrawerProps, 'modelValue'>>

// form组件属性
export type IForm = Partial<Omit<FormProps, 'model' | 'rules'>>

// 对象类型
export type IObject = Record<string, any>

// 表单项
export type IFormItems<T = any> = Array<{
  // 组件类型(如input,select,radio,custom等，默认input)
  type?:
    | 'input'
    | 'select'
    | 'radio'
    | 'checkbox'
    | 'tree-select'
    | 'date-picker'
    | 'input-number'
    | 'text'
    | 'custom'
  // 组件属性
  attrs?: IObject
  // 组件可选项(适用于select,radio,checkbox组件)
  options?: Array<{
    label: string
    value: any
    disabled?: boolean
    [key: string]: any
  }>
  // 插槽名(适用于组件类型为custom)
  slotName?: string
  // 标签文本
  label: string
  // 标签提示
  tips?: string
  // 键名
  prop: string
  // 验证规则
  rules?: FormItemRule[]
  // 初始值
  initialValue?: any
  // 是否隐藏
  hidden?: boolean
  // 监听函数
  watch?: (newValue: any, oldValue: any, data: T, items: IObject[]) => void
  // 计算属性函数
  computed?: (data: T) => any
  // 监听收集函数
  watchEffect?: (data: T) => void
  // 初始化数据函数扩展
  initFn?: (item: IObject) => void
}>
